<br/>
<hr/>
<span style="font-align: middle">
<a style="color: white" id="contact_btn" href="#">Contact</a>
 &bull; <a style="color: white" id="desc_btn" href="#">Overview</a>
 &bull; <a style="color: white" id="usage_btn" href="#">Usage</a>
 &bull; <a style="color: white" id="dwnld_btn" href="#">Download</a>
</span>
<hr/>
<br/>
<div id="content"></div>

<p id="contact_content" style="display:none">
OpenBt or "Bit" is developed within the <a class="link" 
href="http://www.neuroinfo.org">Harvard University Neuroinformatics Research 
Group</a> (Cambridge, MA).
<br/><br/>
Contact: tokeefe at fas.harvard.edu
</p>

<p id="desc_content" style="display:none">
OpenBt is a secure and scalable platform for publishing command line tools as 
<a class="link" href="http://en.wikipedia.org/wiki/Representational_State_Transfer">
RESTful</a> web services.
<br/><br/>
<span style="text-decoration: underline">Security</span>
<br/><br/>
Originally designed for medical image analysis, input and output data (I/O) are 
only allowed to exist for the duration of a request and are never accessible via 
public URL.
<br/><br/>
<span style="text-decoration: underline">Scalability</span>
<br/><br/>
OpenBt may be deployed in either a single- or multi-instance configuration &mdash; where 
several OpenBt instances are able to
<a class="link" href="http://en.wikipedia.org/wiki/Load_balancing_(computing)">
balance a given workload</a>.
<br/><br/>
<span style="text-decoration: underline">Community Oriented</span>
<br/><br/>
<img src="/img/BT_Arch.png" style="float: right; height:200px" alt=""/>
We hope OpenBt to be a successful, community-driven effort, which is why we 
chose to write OpenBt using 
<a class="link" href="http://framework.zend.com">Zend Framework</a> and one of
the least restrictive <a class="link" href="/Index/license">
licenses</a>. 
<br/><br/>
OpenBt may be downloaded from Sourceforge or within a fully-configured 
[<a class="link" href="http://en.wikipedia.org/wiki/LAMP_(software_bundle)">LAMP</a>]
<a class="link" href="http://www.vmware.com">VMware</a>
<sup style="font-size: 10px;">&reg;</sup> virtual machine for simple, rapid 
deployment.
<br/><br/>
<span style="text-decoration: underline">POSIX</span>
<br/><br/>
OpenBt is not <a class="link" href="http://en.wikipedia.org/wiki/POSIX">POSIX</a> 
compliant as there are far too many command line utilities that are equally 
or less compliant. We believe that the following breakdown of a command line 
utility &mdash; used throughout OpenBt &mdash; generalizes fairly well:
<br/><br/>
executable [operand] [-flag] [-argument value]
<br/><br/>
&nbsp; * Executable - the utility name<br/>
&nbsp; * Operand - an option-argument <span style="text-decoration: underline">without</span> an option<br/>
&nbsp; * Argument - an option-argument <span style="text-decoration: underline">with</span> an option<br/>
&nbsp; * Flag - an option <span style="text-decoration: underline">without</span> an option-argument
<br/><br/>
OpenBt will preserve the order of operands, flags, and arguments for when such 
behavior is necessary.
</p>

<p id="usage_content" style="display:none">
OpenBt web services were intended to be used from the command line, though there 
exists a built-in mechanism for browser-based access. 
<br/><br/>
We will briefly review two example web services:
<br/><br/> 
The first service will return the 
<a class="link" href="http://en.wikipedia.org/wiki/Uptime">uptime</a> of an 
OpenBt machine while the second will use two input text files and a custom text 
message to produce a very basic output file. To use these services via the 
command line, you should be familiar with the 
<a class="link" href="http://curl.haxx.se/">cURL</a> command line utility, 
typically available on all UNIX and UNIX-like operating systems whereas Windows 
users need only to download the latest binary from the  
<a class="link" href="http://curl.haxx.se/download.html">developer's website</a>.
<br/><br/>
<span style="text-decoration: underline">Examples</span>:<br/><br/>
<span style="font-weight: normal">
console:~/$ curl http://www.open-bt.com/Service/uptime
<br/><br/>
console:~/$ curl http://www.open-bt.com/Service/example -F 
"operand1=@/path/to/file1.txt" -F "in=@/path/to/file2.txt" -F 
"message=Business Time" -o result.txt
</span>
<br/><br/>
Any insufficient arguments or input files will simply return an XML 
representation of that web service. Runtime errors are formatted and returned to 
the end user. The service XML should reveal all that is necessary for proper 
execution of the program e.g., which arguments or files are required. To see the 
required input for the "example" web service, simply type:
<br/><br/>
<span style="font-weight: normal">
console:~/$ curl http://www.open-bt.com/Service/example
</span>
<br/><br/>
Both the XML and HTML forms can be used as aids while learning OpenBt service
usage. Accessing the HTML forms is possible by clicking on any of the buttons to 
the left.
</p>

<p id="dwnld_content" style="display:none">
You can download the latest OpenBt release from SourceForge:
<br/><br/>
... still pending approval :(
<br/><br/>
</p>


<script type="text/javascript">
document.getElementById("contact_btn").onclick = function() {
	document.getElementById("content").innerHTML = 
		document.getElementById("contact_content").innerHTML;
};

document.getElementById("desc_btn").onclick = function() {
	document.getElementById("content").innerHTML = 
		document.getElementById("desc_content").innerHTML;
};

document.getElementById("usage_btn").onclick = function() {
	document.getElementById("content").innerHTML = 
		document.getElementById("usage_content").innerHTML;
};

document.getElementById("dwnld_btn").onclick = function() {
	document.getElementById("content").innerHTML = 
		document.getElementById("dwnld_content").innerHTML;
};
</script>
